package br.ufpb.di.knowledgetv.classificador;

import br.ufpb.di.knowledgetv.instancias.Perfil;

import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.Instance;

public class Classificador {
	
	private Classifier naiveBayesClassifier;
	private Instance instancia;
	
	public Classificador(Perfil usuario){
		this.instancia = usuarioToInstance(usuario);
		this.naiveBayesClassifier = new NaiveBayes();
		treinarClassificador();
	}
	
	public double[] classificar(){
		double[] dist = null;
		try {
			dist = naiveBayesClassifier.distributionForInstance( this.instancia );
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return dist;
	}
	
	public void setInstancia(Perfil usuario) {
		this.instancia = usuarioToInstance(usuario);
	}
	
	private void treinarClassificador(){
		try {
			naiveBayesClassifier.buildClassifier( 
					CriadorDeInstancias.getInstances( ImportadorArff.getArffReader() ) 
			);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private Instance usuarioToInstance(Perfil usuario){
		Instance instance = new Instance(6);
		
		instance.setDataset( 
				CriadorDeInstancias.getInstances( ImportadorArff.getArffReader() )
		);
		
		instance.setValue(0, usuario.getSexo());
		instance.setValue(1, usuario.getFaixaEtaria());
		instance.setValue(2, usuario.getEstadoCivil());
		instance.setValue(3, usuario.getEscolaridade());
		instance.setValue(4, usuario.getRenda());
		instance.setValue(5, usuario.getNumeroFilhos());
		
		return instance;
	}
		
}
